/*
 * Copyright (c) 2024. hallele, Inc All rights reserved.
 */

package cn.hallele.infrastructure.util;

import cn.hallele.infrastructure.util.bean.AES;
import cn.hallele.infrastructure.util.bean.RSA;

import java.security.SecureRandom;
import java.util.Optional;

/**
 * 处理加解密、签名等安全操作的工具
 *
 * @author anle5
 * @since 2024/9/11 23:18
 */
public class SecurityUtil {
    /**
     * AES的密钥
     */
    public final static String KEY_NAME = "hal.plugin.properties-encrypt-key";

    /**
     * AES默认的密钥
     */
    public final static String DEFAULT_AES_KEY = "QPjL9V1wlrDrOsqJXDVBdg==";

    /**
     * 获取一个rsa加解密工具
     *
     * @param privateKey 私钥
     * @param publicKey  公钥
     */
    public static RSA rsa(String privateKey, String publicKey) {
        return new RSA(privateKey, publicKey);
    }

    /**
     * 获取一个aes加解密工具
     *
     * @param key 密钥
     */
    public static AES aes(String key) {
        return new AES(key);
    }

    /**
     * 获取一个aes加解密工具，key从环境变量中获取
     */
    public static AES aes() {
        return new AES(Optional.ofNullable(System.getenv(KEY_NAME)).orElse(DEFAULT_AES_KEY));
    }

    /**
     * 生成安全随机数
     *
     * @param length 随机数长度
     * @return 安全随机数
     */
    public static int randomInt(int length) {
        SecureRandom secureRandom = new SecureRandom();
        return secureRandom.nextInt(length);
    }

    /**
     * 生成安全随机字符串
     *
     * @param length 随机数长度
     * @return 安全随机数
     */
    public static String randomString(int length) {
        return "" + System.currentTimeMillis() + randomInt(length);
    }
}
